优雅的启动/关闭

您所在的位置:网站首页 pm2 定时重启 优雅的启动/关闭

优雅的启动/关闭

2024-05-22 03:09| 来源: 网络整理| 查看: 265

优雅的开关机 Graceful Start/Shutdown

PM2 中如何处理信号

优雅的停止

为了允许正常重启/重新加载/停止进程,请确保在让应用程序退出之前拦截 SIGINT 信号并清除所需的一切(如数据库连接、处理作业...)。

jsprocess.on('SIGINT', () => { db.stop((err) => { process.exit(err ? 1 : 0) }) })

现在 pm2 reload 将变成 gracefulReload。

配置终止超时

通过 CLI,这会将超时延长至 3000 毫秒:

bashpm2 start app.js --kill-timeout 3000

Via 申请声明 use the kill_timeout attribute:

jsmodule.exports = { apps: [{ name: 'app', script: './app.js', kill_timeout: 3000 }] } 优雅的开始

有时您可能需要等待您的应用程序与您的数据库/缓存/工作者/任何东西建立连接。 PM2 在将您的应用程序视为“在线”之前需要等待。 为此,您需要向 CLI 提供--wait-ready或在进程文件中提供wait_ready: true。 这将使 PM2 监听该事件。 在您的应用程序中,您需要添加 process.send('ready'); 当您希望您的应用程序被视为准备就绪时。

jsconst http = require('node:http') const app = http.createServer((req, res) => { res.writeHead(200) res.end('hey') }) var listener = app.listen(0, () => { console.log(`Listening on port ${listener.address().port}`) // 这里我们发送就绪信号给PM2 process.send('ready') })

然后启动应用程序:

bashpm2 start app.js --wait-ready 配置就绪超时

默认情况下,PM2 等待 3000ms 等待 ready 信号。

通过 CLI,这会将超时延长至 10000 毫秒:

bashpm2 start app.js --wait-ready --listen-timeout 10000

通过 申请声明 使用 listen_timeout 和 wait_ready 属性:

jsmodule.exports = { apps: [{ name: 'app', script: './app.js', wait_ready: true, listen_timeout: 10000 }] } 优雅开始使用http.Server.listen

仍然有挂钩到 http.Server.listen 方法的默认系统。 当您的 http 服务器接受连接时,它会自动将您的应用程序声明为准备就绪。 您可以使用与 --wait-ready 优雅启动相同的变量来增加 PM2 等待时间:进程文件中的 listen_timeout 条目或通过 CLI 的 --listen-timeout=XXXX。

说明:信号流

当一个进程被 PM2 停止/重启时,一些系统信号会按给定的顺序发送到您的进程。

首先,一个 SIGINT 信号被发送到您的进程,您可以捕获该信号以了解您的进程将被停止。 如果您的应用程序在 1.6s (customizable) 之前没有自行退出,它将收到一个 SIGKILL 信号强制进程退出。

信号 SIGINT 可以通过设置环境变量 PM2_KILL_SIGNAL 替换为任何其他信号(例如 SIGTERM)。

Windows 优雅停止

当信号不可用时,您的进程将被终止。 在这种情况下,您必须通过 CLI 使用 --shutdown-with-message 或在生态系统文件中使用 shutdown_with_message 并监听 shutdown 事件。

Via CLI:

bashpm2 start app.js --shutdown-with-message

通过 申请声明 使用 shutdown_with_message 属性:

jsmodule.exports = { apps: [{ name: 'app', script: './app.js', shutdown_with_message: true }] }

监听shutdown事件

jsprocess.on('message', (msg) => { if (msg == 'shutdown') { console.log('Closing all connections...') setTimeout(() => { console.log('Finished closing connections') process.exit(0) }, 1500) } }) 上一篇快速入门 Quick Start下一篇Process Actions 进程动作


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3